package com.quectel.aiot.service;

import com.quectel.aiot.entity.Device;
import java.util.List;

public interface DeviceService {

    // ===============================================
    // =========== 以下是您原有的、无需修改的方法声明 ===========
    // ===============================================

    void syncDevices(String productKey);

    List<Device> getDevicesByProductKey(String productKey);

    List<Device> getAllDevices();

    Device getDeviceById(String deviceId);

    void deleteDevice(String deviceId);

    void syncAllProductsDevices();

    void syncDevice(String productKey, String deviceKey);


    // ===============================================
    // ===========  以下是为实现新功能而新增的方法声明  ===========
    // ===============================================

    /**
     * 根据设备的 Product Key 和 Device Key，获取完整的设备信息。
     * 返回的 Device 对象中将直接包含当前激活的 roleId 和 voiceId。
     *
     * @param pk Product Key
     * @param dk Device Key
     * @return Device 实体对象，如果找不到设备则返回 null。
     */
    Device getDeviceWithCurrentRole(String pk, String dk);

    /**
     * 切换指定设备的当前角色和音色。
     *
     * @param pk      设备的 Product Key
     * @param dk      设备的 Device Key
     * @param roleId  要切换到的新角色的 ID
     * @param voiceId 要切换到的新音色的 ID
     * @return 如果更新成功（即找到了对应的设备并修改了记录）则返回 true，否则返回 false。
     */
    boolean switchRoleAndVoice(String pk, String dk, Long roleId, Long voiceId);
}